package com.yangtzeu.jwc.dao;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.jsoup.nodes.Document;

import android.content.Context;

import com.loopj.android.http.AsyncHttpResponseHandler;
import com.yangtzeu.jwc.businessservice.BusinessHttpCallBack;
import com.yangtzeu.jwc.domain.Course;
import com.yangtzeu.jwc.domain.KbSelection;
import com.yangtzeu.jwc.domain.Sc;
import com.yangtzeu.jwc.domain.Student;
import com.yangtzeu.jwc.domain.XkInfo;

public interface StudentDao {

    /**
     * 登录
     *
     * @param username
     * @param password
     * @param type
     * @param callBack
     */
    public abstract void login(final String username, final String password, final String type, final BusinessHttpCallBack callBack);

    /**
     * 查询必修课绩点
     *
     * @param type    类型
     * @param arg     参数
     * @param selYear 年份
     * @param selTerm 学期
     * @param student 学生对象
     * @return
     * @throws Exception
     */
    public abstract void queryBxkJd(final BusinessHttpCallBack callBack);

    /**
     * 查询学位课绩点
     *
     * @param type类型
     * @param arg     参数
     * @param selYear 年份
     * @param selTerm 学期
     * @param student 学生
     * @return
     * @throws Exception
     */
    public abstract void queryXwkJd(final BusinessHttpCallBack callBack);

    /**
     * 查询成绩
     *
     * @param type    查询成绩的类型(全部,本学期,学位课,必修课)
     * @param arg     便于以后修改暂时不需要默认为空或""就行
     * @param selYear 查询的年份
     * @param selTerm 查询的学期
     * @param student 学生
     * @return
     * @throws Exception
     */
    public abstract void queryScore(final boolean Score, final BusinessHttpCallBack callBack);

    /**
     * 获取用户详细信息
     *
     * @param student 用户(只包含用户名和密码,cookie)
     * @param path    获取详细信息的地址.
     * @return
     * @throws Exception
     */
    public abstract void getStudentInfo(BusinessHttpCallBack callBack);

    /**
     * 保存用户
     *
     * @param context  上下文对象
     * @param name     用户学号
     * @param password 密码
     */
    public abstract void saveStudent(Context context, String name, String password);

    /**
     * 修改保存的用户
     *
     * @param context
     * @param name
     * @param password
     */
    public abstract void modifySavedStudent(Context context, String name, String password);

    /**
     * 查询保存的用户
     *
     * @param context 上下文
     * @return
     */
    public abstract Student getSavedStudent(Context context);

    /**
     * 删除用户记录
     *
     * @param context
     */
    public abstract void clearStudent(Context context);

    /**
     * 得到用户的选课信息
     *
     * @param student
     * @param selTerm
     * @param selYear
     * @return
     */
    public void getXkInfo(BusinessHttpCallBack callBack);

    /**
     * 查看用户已选课程
     *
     * @param student
     * @param type
     * @param selYear
     * @param selTerm
     * @param selXiaoqu
     * @return
     * @throws IOException
     */
    public void getXkInfo(String selYear, String selTerm, String selXiaoqu, BusinessHttpCallBack callBack);

    /**
     * 得到当前公选课选项
     *
     * @param student
     * @param type
     * @return
     * @throws IOException
     */
    void getGxk(String xiaoqu, BusinessHttpCallBack callBack);

    /**
     * 选修公选课
     *
     * @param student
     * @param courseId
     * @return
     * @throws IOException
     */
    void xxGxk(String courseId, BusinessHttpCallBack callBack);

    /**
     * 取消选修的公选课
     *
     * @param student
     * @param courseId
     * @return
     * @throws IOException
     */
    void qxxxGxk(Student student, String courseId, final BusinessHttpCallBack callBack);

    /**
     * 修改密码
     *
     * @param newPassword 新密码
     * @param callBack
     */
    void changePassword(final String newPassword, final BusinessHttpCallBack callBack);


    /**
     * 得到课表的初始选项
     *
     * @throws Exception
     */
    public abstract void getKbSelection(final BusinessHttpCallBack callBack);

    public abstract void queryClass(String selYear, String selTerm, String selDepart, String selClass, BusinessHttpCallBack callBack);

    /**
     * 从文档中解析出class集合
     *
     * @param doc
     * @return
     */
    public abstract boolean getClassByDoc(Document doc, KbSelection kbSelection, BusinessHttpCallBack callBack);

    /**
     * 查询课表
     *
     * @param selYear   年份
     * @param selTerm   学期
     * @param selKblb   课表类别
     * @param selDepart 所在院系
     * @param selClass  所在班级
     * @return
     * @throws Exception
     */
    public abstract void queryKb(String selYear, String selTerm, String selDepart, String selClass, final BusinessHttpCallBack callBack);

}